package gui;

import java.awt.BorderLayout;
import java.awt.Dialog;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Panel;
import java.awt.Button;
import java.awt.Choice;
import java.awt.Label;
import java.awt.TextField;
import java.awt.List;

import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.ActionEvent;
import java.util.Observable;
import java.util.Observer;

import daten.Fachgebiet;
import daten.Professor;
import daten.Diplomarbeit;
import daten.ProfessorenContainer;

public class ProfessorEditieren extends Dialog implements ActionListener, Observer
	{
			private Professor subject;

			private TextField vorname, nachname;
			private Choice fachgebiet;
			private List diplomarbeiten;

			public ProfessorEditieren(Dialog owner, Professor p)
			{
				super(owner, "Professor " + p.getNachname() + " modifizieren", true);

				subject = p;
				
				setLayout(new GridLayout(0, 1));

				Panel p1 = new Panel();
				p1.add(new Label("Vorname: "));
				vorname = new TextField(20);
				vorname.setText(subject.getVorname());
				p1.add(vorname);
				add(p1);

				Panel p2 = new Panel();
				p2.add(new Label("Nachname: "));
				nachname = new TextField(20);
				nachname.setText(subject.getNachname());
				p2.add(nachname);
				add(p2);

				Panel p3 = new Panel();
				p3.add(new Label("Fachgebiet: "));
				fachgebiet = new Choice();
				fachgebiet.add("(none)");
				for(Fachgebiet fg: Fachgebiet.values()){
					fachgebiet.add(fg.value());
				}
				if(subject.getFachgebiet()==null){
					fachgebiet.select("(none)");
				}
				else{
					fachgebiet.select(subject.getFachgebiet().value());
				}
				p3.add(fachgebiet);
				add(p3);
				
				Panel p0 = new Panel();
				Button abbrechen = new Button("Abbrechen");
				abbrechen.addActionListener(this);
				p0.add(abbrechen);

				Button ok = new Button("Aendern");
				ok.addActionListener(this);
				p0.add(ok);
				add(p0);

				Panel q = new Panel();
				add(q);
				
				q.setLayout(new BorderLayout());

				Panel q1 = new Panel();
				q1.add(new Label("Betreute Diplomarbeiten: "));
				q.add("North", q1);

				diplomarbeiten = new List(10, false);
				update();
				q.add("Center", diplomarbeiten);

				Panel q2 = new Panel();
				Button hinzu = new Button("Hinzufuegen");
				hinzu.addActionListener(this);
				q2.add(hinzu);

				Button loeschen = new Button("Loeschen");
				loeschen.addActionListener(this);
				q2.add(loeschen);
				
				q.add("South", q2);

				pack();
				setLocation(owner.getLocation().x + 10, owner.getLocation().y + 10);
				setVisible(true);
			}

			public Professor getSubject() {
				return subject;
			}

			private void save()
			{
				subject.setVorname(vorname.getText());
				subject.setNachname(nachname.getText());
				if (!fachgebiet.getSelectedItem().equals("(none)"))
				{
				  subject.setFachgebiet(fachgebiet.getSelectedItem());
				}
			}

			private void onAendern()
			{
			      if (checkData())
			      {    
			    	save();
				    dispose();
			      }
			}
			
			private void onLoeschen()
			{
				Diplomarbeit d = getBetreuteDiplomarbeit();
				if (d==null){
					System.out.println("Diplomarbeit nicht vorhanden!");
					return;
				}
				subject.unlinkBetreuteDiplomarbeiten(d);
				update();
			}
			
			private void onHinzufuegen()
			{
				new DiplomarbeitenAuswahl(this,subject);
				update();
			}
			
			private void onAbbrechen()
			{
				dispose();
			}

			private void update(){
				diplomarbeiten.removeAll();
				for (int i=0; i<subject.getSizeBetreuteDiplomarbeiten(); i++){
					diplomarbeiten.add(subject.getlinkBetreuteDiplomarbeiten(i).toString());
				}
			}
			
			private boolean checkData()
			{
				return (!vorname.getText().equals("")) && (!nachname.getText().equals(""));
			}

			public Diplomarbeit getBetreuteDiplomarbeit(){
				if (diplomarbeiten.getSelectedItem() != null)
				{
					for (int i=0; i<subject.getSizeBetreuteDiplomarbeiten(); i++){
						if (subject.getlinkBetreuteDiplomarbeiten(i).toString().equals(diplomarbeiten.getSelectedItem())){
							return subject.getlinkBetreuteDiplomarbeiten(i);
						}
					}
				}
				return null;
			}

			public void actionPerformed(ActionEvent e)
			{
				if (e.getActionCommand().equals("Abbrechen"))
					onAbbrechen();

				if (e.getActionCommand().equals("Aendern"))
					onAendern();

				if (e.getActionCommand().equals("Loeschen"))
					onLoeschen();				

				if (e.getActionCommand().equals("Hinzufuegen"))
					onHinzufuegen();				
			}

			@Override
			public void update(Observable arg0, Object arg1) {
				update();
				
			}
}
